✅scrapbox.Page.linesと同等のデータをshallow copyして返す関数を作る
from
scrapbox-userscript-std
✅
scrapbox.Page.lines
と同等のデータを
shallow copy
して返す関数を作る
問題背景
scrapbox.Project.pagesはキャッシュして使
うと同じ
scrapbox.Page.lines
は常に
deep copy
で提供される
数行程度のページならあまり問題ないが、数千行あるとかなりCPUを食う
特に、
lines:changed
で毎回呼び出されると、editorがほぼ固まった状態になってしまう
目も当てられない
takker.icon
解決策として2つの方針がある
scrapbox.Page.lines
を、行が変更された時だけ呼び出す
scrapbox.Project.pagesはキャッシュして使
うと同じ解決方法
ただし、
lines:changed
で毎回呼び出された場合は効果なし
✅scrapbox.Page.linesをcacheして使う
で実装済み
コピーではなく参照を返す
これなら参照のコピーだけで済むので、CPUもメモリも使わずにすむ
ただし、
React Componentの内部変数からScrapboxのカーソル位置と選択範囲を取得
するようなトリッキーなことをしなくてはならない
今回はこちらの方針で実装した
実装
https://github.com/takker99/scrapbox-userscript-std/pull/118
shallow copyしたlinesを返す
https://github.com/takker99/scrapbox-userscript-std/pull/120
scrapbox-access-nodes@0.1.0
相当の関数群ので使っているのを置き換えた
#2023-04-07
07:55:21
#2023-04-04
20:42:13